Many Windows® print drivers utilizing a plug-in customization architecture (commonly referred to as “mini-drivers”) by the Microsoft Corporation are repeatedly loaded and unloaded from memory by base drivers such as, for example, Unidrv and Pscript, hundreds or perhaps even thousands of times during the course of a single print operation to handle various events and callbacks commonly known in the software arts. This has caused performance degradation problems as the driver's DLLs (Dynamic Linked Libraries) grow in size, number, and complexity of driver features. Repeatedly loading and unloading feature rich drivers can degrade performance in those systems where memory and processor speed may be limited by hardware constraints.
Customers utilizing printing systems often complain about print driver performance and, more particularly, about the time it can take to display, for instance, a Printer Properties User Interface (PPUI), switch a print driver in an application, and display a Document Properties Interface (DPI) in any single application. One reason for this time delay can be the number of times the plug-in DLLs are loaded and unloaded from memory. Plug-in DLLs may be loaded and unloaded from memory over one hundred times simply to display a PPUI because DLLs are read, address tables created, and in many instances global data including some complex C++ objects must be initialized.
Previous methods utilized various algorithmic optimization techniques to increase performance. For example, relatively simple C-language DLLs (not C++ DLLs exporting classes) were loaded and unloaded through a manual process in certain key event handlers and callbacks in order to address performance degradation issues. In addition, the Microsoft compiler and linker technology, often referred to as “Delay-Loading”, has been adapted for use with the plug-in DLL in an effort to eliminate loading of dependent DLLs when the code they contain is not required during that loaded instance.
Accordingly, what is needed in this art are increasingly sophisticated systems and methods for ensuring that a plug-in DLL is not repeatedly loaded and unloaded during the course of a single user-initiated operation in order to enhance system performance.